# -*- coding: utf-8 -*-
# 作者： 安智军
# @Time：2022/7/9 10:56
# @Email：1010666711@qq.com
# @File： 1、递归.py
'''
递归能解决什么问你呢？
1、遍历目录： 例如输出某文件夹下的所有的文件包括子文件夹

'''

# 例如输出某文件夹下的所有的文件的绝对路径 弯沉
# 方法一、 非递归的方法写

import os


def print_all_files(file_path):
    for root, dirs, files in os.walk(file_path):
        # print(root,dirs,files)
        # print(root)
        for filename in files:
            # print(root,filename)
            print(os.path.join(root, filename))


# 方法二、使用递归实现获取当前文件下所有文件的路径
def print_all_files2(file_path):
    '''
    思路：获取到file_path 下所有的文件及文件夹  # os.scandir(file_path): 或者 os.list.dir(file_path) scandir比list更快
    如果获取到的是文件夹就递归获取文件 print_all_files2(文件夹)
    如果是文件就直接输出

    :param file_path:
    :return:
    '''

    for file in os.scandir(file_path):
        print(file)
        # 判断item是啥
        if file.is_file():
            print(file.path)
        elif file.is_dir():
            print_all_files2(file.path)
        else:
            print(1111)

import sys
sys.setrecursionlimit(5000) # 将默认递归深度修改为3000

# 录屏递归
def recorder(n):
    print(f'这是第{n}层录屏')

    if n == 1:
        return None  # 结束递归，不借宿递归就会无限递归
    else:
        n -= 1
        recorder(n)


if __name__ == '__main__':
    # p = r"D:\测开教程\2021测开"
    # p = r"F:\python_advance_programming"
    p = r"F:\python_advance_programming\dev_03_day (迭代器 、生成器)"
    # print_all_files(p)
    # print_all_files2(p)
    recorder(3)


# python 如何实现栈？



# 使用递归 打印文件的绝对路径


def get_file_path(path):
    '''
    获取文件的绝对路径
    思路  如果是文件获取路径
    如果是文件夹递归调用 参数为文件夹的路径
    :param path:
    :return:
    '''
    for file in os.scandir(path):
        if file.is_file():
            print(file.path)
            # return path
        elif file.is_dir():
            get_file_path(file.path)
        # else:
        #     return None



if __name__ == '__main__':
    path1 = r"F:\python_advance_programming\dev_03_day (迭代器 、生成器)"
    print(get_file_path(path1))